home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 1997 #3 / Amiga Plus CD - 1997 - No. 03.iso / pd / programmierung / alienbreed3d2_src / cheesesauce / eyeball.s < prev    next >
Text File  |  1997-01-31  |  15KB  |  918 lines

  1. ItsAEyeBall:
  2.  
  3.  tst.b NASTY
  4.  bne .yesnas
  5.  move.w #-1,12(a0)
  6.  rts
  7. .yesnas:
  8.  
  9.  move.w #$0f1f,14(a0)
  10.  move.w #$1020,6(a0)
  11.  
  12.  move.b worry(a0),d0
  13.  move.b d0,d1
  14.  and.w #128,d1
  15.  and.b #127,d0
  16.  sub.b #1,d0
  17.  bge.s .oknn
  18.  move.b #0,d0
  19. .oknn: 
  20.  
  21.  add.b d0,d1
  22.  move.b d1,worry(a0)
  23.  
  24.  move.w (a0),CollId
  25.  move.w #160,extlen
  26.  move.b #2,awayfromwall
  27.  
  28.  move.l #0,StepUpVal
  29.  move.l #$1000000,StepDownVal
  30.  move.l #96*128,thingheight
  31.  move.w #8,screamsound
  32.  move.w #64,nasheight
  33.  
  34.  clr.b gotgun
  35.  move.w 12(a0),d2
  36.  bge.s .stillalive
  37. .notthisone:
  38.  move.w 12(a0),GraphicRoom(a0)
  39.  rts
  40. .stillalive:
  41.  
  42. .notdying: 
  43.  
  44.  tst.b 17(a0)
  45.  beq.s .cantseeplayer
  46.  tst.w ThirdTimer(a0)
  47.  ble EyeBallAttack
  48.  move.w TempFrames,d0
  49.  sub.w d0,ThirdTimer(a0)
  50.  bra .waitandsee
  51.  
  52. .cantseeplayer:
  53.  
  54.  jsr GetRand
  55.  lsr.w #4,d0
  56.  and.w #31,d0
  57.  add.w #10,d0
  58.  move.w d0,ThirdTimer(a0)
  59.  
  60. .waitandsee:
  61.  
  62.  move.w #30,FourthTimer(a0)
  63.  
  64.  move.w 12(a0),d2
  65.  move.l ZoneAdds,a5
  66.  move.l (a5,d2.w*4),d0
  67.  add.l LEVELDATA,d0
  68.  move.l d0,objroom
  69.  
  70.  jsr ViewpointToDraw
  71.  
  72.  move.l alframe,d0
  73.  add.l #$F0012,d0
  74.  move.l d0,8(a0)
  75.  
  76.  move.w TurnSpeed(a0),d0
  77.  add.w Facing(a0),d0
  78.  and.w #8190,d0
  79.  move.w d0,Facing(a0)
  80.  
  81.  move.w 4(a0),d0
  82.  ext.l d0
  83.  asl.l #7,d0
  84.  sub.l #48*128,d0
  85.  move.l d0,newy
  86.  move.l d0,oldy
  87.  
  88.  move.w 12(a0),FromZone
  89.  jsr CheckTeleport
  90.  tst.b OKTEL
  91.  beq.s .notel
  92.  move.l floortemp,d0
  93.  asr.l #7,d0
  94.  add.w d0,4(a0)
  95.  bra .nochangedir
  96. .notel:
  97.  
  98.  
  99.  move.w maxspd(a0),d2
  100.  muls TempFrames,d2
  101.  move.w d2,speed
  102.  move.w Facing(a0),d0
  103.  move.b ObjInTop(a0),StoodInTop
  104.  movem.l a6/d0/a0/a1/a3/a4/d7,-(a7)
  105.  jsr GoInDirection
  106.  move.w #%1000000000,wallflags
  107.  
  108.  move.l #%11111111110111100001,CollideFlags
  109.  jsr Collision
  110.  tst.b hitwall
  111.  beq.s .okcanmove
  112.  
  113.  move.w oldx,newx
  114.  move.w oldz,newz
  115.  movem.l (a7)+,a6/d0/a0/a1/a3/a4/d7
  116.  bra.s .hitathing
  117.  
  118. .okcanmove:
  119.  
  120.  clr.b wallbounce
  121.  jsr MoveObject
  122.  movem.l (a7)+,a6/d0/a0/a1/a3/a4/d7
  123.  move.b StoodInTop,ObjInTop(a0)
  124.  
  125. .hitathing:
  126.  
  127. ; tst.b hitwall
  128. ; beq.s .nochangedir
  129. ; move.w #-1,ObjTimer(a0)
  130. .nochangedir
  131.  
  132.  move.l objroom,a2
  133.  move.w (a2),12(a0)
  134.  move.w newx,(a1)
  135.  move.w newz,4(a1)
  136.  
  137.  move.w (a2),d0
  138.  move.l #ZoneBrightTable,a5
  139.  move.l (a5,d0.w*4),d0
  140.  tst.b ObjInTop(a0)
  141.  bne.s .okbit
  142.  swap d0
  143. .okbit:
  144.  move.w d0,2(a0)
  145.  
  146.  move.l ToZoneFloor(a2),d0
  147.  move.l ToZoneRoof(a2),d1
  148.  tst.b ObjInTop(a0)
  149.  beq.s .notintop
  150.  move.l ToUpperFloor(a2),d0
  151.  move.l ToUpperRoof(a2),d1
  152. .notintop:
  153.  
  154.  move.w objyvel(a0),d2
  155.  add.w d2,4(a0)
  156.  
  157.  move.w 4(a0),d2
  158.  ext.l d2
  159.  asl.l #7,d2
  160.  move.l d2,d3
  161.  add.l #48*256,d2
  162.  sub.l #48*256,d3
  163.  
  164.  cmp.l d0,d2
  165.  blt.s .botnohit
  166.  move.l d0,d2
  167.  move.l d2,d3
  168.  neg.w objyvel(a0)
  169.  sub.l #96*256,d3
  170. .botnohit:
  171.  
  172.  cmp.l d1,d3
  173.  bgt.s .topnohit
  174.  move.l d1,d3
  175.  neg.w objyvel(a0)
  176. .topnohit:
  177.  
  178.  add.l #48*256,d3
  179.  asr.l #7,d3
  180.  move.w d3,4(a0)
  181.  
  182.  move.b damagetaken(a0),d2
  183.  beq .noscream
  184.  
  185.  sub.b d2,numlives(a0)
  186.  bgt .notdeadyet
  187.  
  188.  movem.l d0-d7/a0-a6,-(a7)
  189.  sub.l ObjectPoints,a1
  190.  add.l #ObjRotated,a1
  191.  move.l (a1),Noisex
  192.  move.w #400,Noisevol
  193.  move.w #14,Samplenum
  194.  move.b #1,chanpick
  195.  clr.b notifplaying
  196.  st backbeat
  197.  move.b 1(a0),IDNUM
  198.  jsr MakeSomeNoise
  199.  movem.l (a7)+,d0-d7/a0-a6
  200.  
  201.  movem.l d0-d7/a0-a6,-(a7)
  202.  move.w #0,d0
  203.  move.w #9,d2
  204.  move.w #31,d3
  205.  jsr ExplodeIntoBits
  206.  PROTMCHECK a5
  207.  movem.l (a7)+,d0-d7/a0-a6
  208.  move.w #-1,12(a0)
  209.  move.w 12(a0),GraphicRoom(a0)
  210.  rts
  211.  
  212. .noexplode:
  213.  
  214.  movem.l d0-d7/a0-a6,-(a7)
  215.  sub.l ObjectPoints,a1
  216.  add.l #ObjRotated,a1
  217.  move.l (a1),Noisex
  218.  move.w #200,Noisevol
  219.  move.w screamsound,Samplenum
  220.  move.b #1,chanpick
  221.  clr.b notifplaying
  222.  st backbeat
  223.  move.b 1(a0),IDNUM
  224.  jsr MakeSomeNoise
  225.  movem.l (a7)+,d0-d7/a0-a6
  226.  move.w #18,10(a0)
  227.  move.w #30,ThirdTimer(a0)
  228.  move.w #0,FourthTimer(a0)
  229.  move.w 12(a0),GraphicRoom(a0)
  230.  rts
  231.  
  232. .notdeadyet:
  233.  clr.b damagetaken(a0)
  234.  movem.l d0-d7/a0-a6,-(a7)
  235.  sub.l ObjectPoints,a1
  236.  add.l #ObjRotated,a1
  237.  move.l (a1),Noisex
  238.  move.w #200,Noisevol
  239.  move.w screamsound,Samplenum
  240.  move.b #1,chanpick
  241.  clr.b notifplaying
  242.  move.b 1(a0),IDNUM
  243.  st backbeat
  244.  jsr MakeSomeNoise
  245.  movem.l (a7)+,d0-d7/a0-a6
  246.  
  247. .noscream
  248.  
  249.  
  250.  move.w TempFrames,d0
  251.  sub.w d0,ObjTimer(a0)
  252.  bge.s .keepsamedir
  253.  
  254.  jsr GetRand
  255.  lsr.w #4,d0
  256.  and.w #255,d0
  257.  sub.w #128,d0
  258.  add.w d0,d0
  259.  move.w d0,TurnSpeed(a0)
  260.  move.w #50,ObjTimer(a0)
  261.  
  262.  jsr GetRand
  263.  lsr.w #4,d0
  264.  and.w #7,d0
  265.  sub.w #3,d0
  266.  move.w d0,d1
  267.  jsr GetRand
  268.  lsr.w #5,d0
  269.  and.w #1,d0
  270.  sub.w d0,d1
  271.  move.w d1,objyvel(a0)
  272.  
  273. .keepsamedir:
  274.  
  275.  move.w TempFrames,d0
  276.  sub.w d0,SecTimer(a0)
  277.  bge.s .nohiss
  278.  
  279.  movem.l d0-d7/a0-a6,-(a7)
  280.  sub.l ObjectPoints,a1
  281.  add.l #ObjRotated,a1
  282.  move.l (a1),Noisex
  283.  move.w #100,Noisevol
  284.  move.w #16,Samplenum
  285.  move.b #1,chanpick
  286.  clr.b notifplaying
  287.  move.b 1(a0),IDNUM
  288.  st backbeat
  289.  jsr MakeSomeNoise
  290.  movem.l (a7)+,d0-d7/a0-a6
  291.  
  292.  Jsr GetRand
  293.  lsr.w #6,d0
  294.  and.w #255,d0
  295.  add.w #300,d0
  296.  move.w d0,SecTimer(a0)
  297.  
  298. .nohiss:
  299.  
  300.  move.b ObjInTop(a0),ViewerTop
  301.  move.b PLR1_StoodInTop,TargetTop
  302.  move.l PLR1_Roompt,ToRoom
  303.  move.l objroom,FromRoom
  304.  move.w newx,Viewerx
  305.  move.w newz,Viewerz
  306.  move.w PLR1_xoff,Targetx
  307.  move.w PLR1_zoff,Targetz
  308.  move.l PLR1_yoff,d0
  309.  asr.l #7,d0
  310.  move.w d0,Targety
  311.  move.w 4(a0),Viewery
  312.  jsr CanItBeSeen
  313.  
  314.  clr.b 17(a0)
  315.  tst.b CanSee
  316.  beq .carryonprowling
  317.  
  318.  move.b #1,17(a0)
  319.  
  320. .carryonprowling:
  321.  
  322.  cmp.b #'n',mors
  323.  beq.s .carryonprowling2
  324.  
  325.  move.b ObjInTop(a0),ViewerTop
  326.  move.b PLR2_StoodInTop,TargetTop
  327.  move.l PLR2_Roompt,ToRoom
  328.  move.l objroom,FromRoom
  329.  move.w newx,Viewerx
  330.  move.w newz,Viewerz
  331.  move.w PLR2_xoff,Targetx
  332.  move.w PLR2_zoff,Targetz
  333.  move.l PLR2_yoff,d0
  334.  asr.l #7,d0
  335.  move.w d0,Targety
  336.  move.w 4(a0),Viewery
  337.  jsr CanItBeSeen
  338.  
  339.  tst.b CanSee
  340.  beq .carryonprowling2
  341.  
  342.  or.b #2,17(a0)
  343.  
  344. .carryonprowling2:
  345.  
  346.  
  347.  move.w 12(a0),GraphicRoom(a0)
  348.  rts
  349.  
  350. EyeBallAttack:
  351.  
  352.  btst #0,17(a0)
  353.  beq EyeBallAttackPLR2
  354.  btst #1,17(a0)
  355.  beq EyeBallAttackPLR1
  356.  
  357.  move.l ObjectPoints,a1
  358.  move.w (a0),d0
  359.  move.w (a1,d0.w*8),d1
  360.  move.w 4(a1,d0.w*8),d2
  361.  
  362.  move.w PLR1_xoff,d3
  363.  move.w PLR1_zoff,d4
  364.  
  365.  sub.w d1,d3
  366.  sub.w d2,d4
  367.  
  368.  muls d3,d3
  369.  muls d4,d4
  370.  add.l d4,d3
  371.  move.w PLR2_xoff,d4
  372.  move.w PLR2_zoff,d5
  373.  sub.w d1,d4
  374.  sub.w d2,d5
  375.  
  376.  muls d4,d4
  377.  muls d5,d5
  378.  add.l d5,d4
  379.  cmp.l d3,d4
  380.  bgt EyeBallAttackPLR1
  381.  
  382. EyeBallAttackPLR2:
  383.  
  384.  move.w TempFrames,d0
  385.  sub.w d0,FourthTimer(a0)
  386.  bgt.s .oktoshoot
  387.  move.w #50,ThirdTimer(a0)
  388. .oktoshoot:
  389.  
  390.  move.w 12(a0),d2
  391.  move.l ZoneAdds,a5
  392.  move.l (a5,d2.w*4),d0
  393.  add.l LEVELDATA,d0
  394.  move.l d0,objroom
  395.  
  396.  jsr ViewpointToDraw
  397.  
  398.  move.l #$F0012,d0
  399.  move.l d0,8(a0)
  400.  
  401.  move.w PLR2_xoff,newx
  402.  move.w PLR2_zoff,newz
  403.  move.w (a0),d1
  404.  move.l #ObjRotated,a6
  405.  move.l ObjectPoints,a1
  406.  lea (a1,d1.w*8),a1
  407.  lea (a6,d1.w*8),a6
  408.  move.w (a1),oldx
  409.  move.w 4(a1),oldz
  410.  move.w maxspd(a0),d2
  411.  muls.w TempFrames,d2
  412.  move.w d2,speed
  413.  move.w #80,Range
  414.  move.w 4(a0),d0
  415.  ext.l d0
  416.  asl.l #7,d0
  417.  sub.l #48*256,d0
  418.  move.l d0,newy
  419.  move.l d0,oldy
  420.  
  421.  move.b ObjInTop(a0),StoodInTop
  422.  movem.l a6/d0/a0/a1/a3/a4/d7,-(a7)
  423.  clr.b canshove
  424.  clr.b GotThere
  425.  jsr HeadTowardsAng
  426.  move.w #%1000000000,wallflags
  427.  
  428.  
  429.  clr.b wallbounce
  430.  Jsr MoveObject
  431.  movem.l (a7)+,a6/d0/a0/a1/a3/a4/d7
  432.  move.b StoodInTop,ObjInTop(a0)
  433.  
  434.  move.w AngRet,Facing(a0)
  435.  
  436.  move.l objroom,a2
  437.  move.w (a2),12(a0)
  438.  move.w oldx,(a1)
  439.  move.w oldz,4(a1)
  440.  
  441.  move.w (a2),d0
  442.  move.l #ZoneBrightTable,a5
  443.  move.l (a5,d0.w*4),d0
  444.  tst.b ObjInTop(a0)
  445.  bne.s .okbit
  446.  swap d0
  447. .okbit:
  448.  move.w d0,2(a0)
  449.  
  450.  move.l ToZoneFloor(a2),d0
  451.  move.l ToZoneRoof(a2),d1
  452.  tst.b ObjInTop(a0)
  453.  beq.s .notintop
  454.  move.l ToUpperFloor(a2),d0
  455.  move.l ToUpperRoof(a2),d1
  456. .notintop:
  457.  
  458.  move.w objyvel(a0),d2
  459.  add.w d2,4(a0)
  460.  
  461.  move.w 4(a0),d2
  462.  ext.l d2
  463.  asl.l #7,d2
  464.  move.l d2,d3
  465.  add.l #48*256,d2
  466.  sub.l #48*256,d3
  467.  
  468.  cmp.l d0,d2
  469.  blt.s .botnohit
  470.  move.l d0,d2
  471.  move.l d2,d3
  472.  neg.w objyvel(a0)
  473.  sub.l #96*256,d3
  474. .botnohit:
  475.  
  476.  cmp.l d1,d3
  477.  bgt.s .topnohit
  478.  move.l d1,d3
  479.  neg.w objyvel(a0)
  480. .topnohit:
  481.  
  482.  add.l #48*256,d3
  483.  asr.l #7,d3
  484.  move.w d3,4(a0)
  485.  
  486.  move.b damagetaken(a0),d2
  487.  beq .noscream
  488.  
  489.  sub.b d2,numlives(a0)
  490.  bgt .notdeadyet
  491.  
  492.  
  493.  movem.l d0-d7/a0-a6,-(a7)
  494.  sub.l ObjectPoints,a1
  495.  add.l #ObjRotated,a1
  496.  move.l (a1),Noisex
  497.  move.w #400,Noisevol
  498.  move.w #14,Samplenum
  499.  move.b #1,chanpick
  500.  clr.b notifplaying
  501.  st backbeat
  502.  move.b 1(a0),IDNUM
  503.  jsr MakeSomeNoise
  504.  movem.l (a7)+,d0-d7/a0-a6
  505.  
  506.  movem.l d0-d7/a0-a6,-(a7)
  507.  move.w #0,d0
  508.  move.w #9,d2
  509.  move.w #31,d3
  510.  jsr ExplodeIntoBits
  511.  movem.l (a7)+,d0-d7/a0-a6
  512.  move.w #-1,12(a0)
  513.  move.w 12(a0),GraphicRoom(a0)
  514.  rts
  515.  
  516. .noexplode:
  517.  
  518.  movem.l d0-d7/a0-a6,-(a7)
  519.  sub.l ObjectPoints,a1
  520.  add.l #ObjRotated,a1
  521.  move.l (a1),Noisex
  522.  move.w #200,Noisevol
  523.  move.w screamsound,Samplenum
  524.  move.b #1,chanpick
  525.  clr.b notifplaying
  526.  st backbeat
  527.  move.b 1(a0),IDNUM
  528.  jsr MakeSomeNoise
  529.  movem.l (a7)+,d0-d7/a0-a6
  530.  move.w #18,10(a0)
  531.  move.w 12(a0),GraphicRoom(a0)
  532.  rts
  533.  
  534. .notdeadyet:
  535.  clr.b damagetaken(a0)
  536.  movem.l d0-d7/a0-a6,-(a7)
  537.  sub.l ObjectPoints,a1
  538.  add.l #ObjRotated,a1
  539.  move.l (a1),Noisex
  540.  move.w #200,Noisevol
  541.  move.w screamsound,Samplenum
  542.  move.b #1,chanpick
  543.  clr.b notifplaying
  544.  move.b 1(a0),IDNUM
  545.  st backbeat
  546.  jsr MakeSomeNoise
  547.  movem.l (a7)+,d0-d7/a0-a6
  548.  
  549. .noscream
  550.  
  551. ; tst.b canshootgun
  552. ; beq .cantshoot
  553.  cmp.w #20,FourthTimer(a0)
  554.  bge .cantshoot
  555.  
  556.   move.w #50,ThirdTimer(a0)
  557.  
  558.  move.w #18,10(a0)
  559.  
  560.  
  561.  move.w #20,Samplenum
  562.  move.b #0,SHOTTYPE
  563.  move.b #5,SHOTPOWER
  564.  move.w #16,SHOTSPEED
  565.  move.w #3,SHOTSHIFT
  566.  move.b ObjInTop(a0),SHOTINTOP
  567.  move.w #0,SHOTOFFMULT
  568.  move.w #-10,2(a0)
  569.  move.l #0,SHOTYOFF
  570.  jsr FireAtPlayer2
  571.  
  572. .cantshoot:
  573.  
  574.  
  575.  move.w TempFrames,d0
  576.  sub.w d0,SecTimer(a0)
  577.  bge.s .nohiss
  578.  
  579.  movem.l d0-d7/a0-a6,-(a7)
  580.  sub.l ObjectPoints,a1
  581.  add.l #ObjRotated,a1
  582.  move.l (a1),Noisex
  583.  move.w #100,Noisevol
  584.  move.w #16,Samplenum
  585.  move.b #1,chanpick
  586.  clr.b notifplaying
  587.  move.b 1(a0),IDNUM
  588.  st backbeat
  589.  jsr MakeSomeNoise
  590.  movem.l (a7)+,d0-d7/a0-a6
  591.  
  592.  Jsr GetRand
  593.  lsr.w #6,d0
  594.  and.w #255,d0
  595.  add.w #300,d0
  596.  move.w d0,SecTimer(a0)
  597.  
  598. .nohiss:
  599.  
  600.  move.b ObjInTop(a0),ViewerTop
  601.  move.b PLR1_StoodInTop,TargetTop
  602.  move.l PLR1_Roompt,ToRoom
  603.  move.l objroom,FromRoom
  604.  move.w newx,Viewerx
  605.  move.w newz,Viewerz
  606.  move.w PLR1_xoff,Targetx
  607.  move.w PLR1_zoff,Targetz
  608.  move.l PLR1_yoff,d0
  609.  asr.l #7,d0
  610.  move.w d0,Targety
  611.  move.w 4(a0),Viewery
  612.  jsr CanItBeSeen
  613.  
  614.  clr.b 17(a0)
  615.  tst.b CanSee
  616.  beq .carryonprowling
  617.  
  618.  move.b #1,17(a0)
  619.  
  620. .carryonprowling:
  621.  
  622.  cmp.b #'n',mors
  623.  beq.s .carryonprowling2
  624.  
  625.  
  626.  move.b ObjInTop(a0),ViewerTop
  627.  move.b PLR2_StoodInTop,TargetTop
  628.  move.l PLR2_Roompt,ToRoom
  629.  move.l objroom,FromRoom
  630.  move.w newx,Viewerx
  631.  move.w newz,Viewerz
  632.  move.w PLR2_xoff,Targetx
  633.  move.w PLR2_zoff,Targetz
  634.  move.l PLR2_yoff,d0
  635.  asr.l #7,d0
  636.  move.w d0,Targety
  637.  move.w 4(a0),Viewery
  638.  jsr CanItBeSeen
  639.  
  640.  tst.b CanSee
  641.  beq .carryonprowling2
  642.  
  643.  or.b #2,17(a0)
  644.  
  645. .carryonprowling2:
  646.  
  647.  move.w 12(a0),GraphicRoom(a0)
  648.  rts
  649.  
  650.  
  651. EyeBallAttackPLR1:
  652.  
  653.  move.w TempFrames,d0
  654.  sub.w d0,FourthTimer(a0)
  655.  bgt.s .oktoshoot
  656.  move.w #50,ThirdTimer(a0)
  657. .oktoshoot:
  658.  
  659.  move.w 12(a0),d2
  660.  move.l ZoneAdds,a5
  661.  move.l (a5,d2.w*4),d0
  662.  add.l LEVELDATA,d0
  663.  move.l d0,objroom
  664.  
  665.  jsr ViewpointToDraw
  666.  
  667.  move.l #$F0012,d0
  668.  move.l d0,8(a0)
  669.  
  670.  move.w PLR1_xoff,newx
  671.  move.w PLR1_zoff,newz
  672.  move.w (a0),d1
  673.  move.l #ObjRotated,a6
  674.  move.l ObjectPoints,a1
  675.  lea (a1,d1.w*8),a1
  676.  lea (a6,d1.w*8),a6
  677.  move.w (a1),oldx
  678.  move.w 4(a1),oldz
  679.  move.w maxspd(a0),d2
  680.  muls.w TempFrames,d2
  681.  move.w d2,speed
  682.  move.w #80,Range
  683.  move.w 4(a0),d0
  684.  ext.l d0
  685.  asl.l #7,d0
  686.  sub.l #20*256,d0
  687.  move.l d0,newy
  688.  move.l d0,oldy
  689.  
  690.  move.b ObjInTop(a0),StoodInTop
  691.  movem.l a6/d0/a0/a1/a3/a4/d7,-(a7)
  692.  clr.b canshove
  693.  clr.b GotThere
  694.  jsr HeadTowardsAng
  695.  move.w #%1000000000,wallflags
  696.  
  697.   
  698.  clr.b wallbounce
  699.  Jsr MoveObject
  700.  movem.l (a7)+,a6/d0/a0/a1/a3/a4/d7
  701.  move.b StoodInTop,ObjInTop(a0)
  702.  
  703.  move.w AngRet,Facing(a0)
  704.  
  705.  move.l objroom,a2
  706.  move.w (a2),12(a0)
  707.  move.w oldx,(a1)
  708.  move.w oldz,4(a1)
  709.  
  710.  move.w (a2),d0
  711.  move.l #ZoneBrightTable,a5
  712.  move.l (a5,d0.w*4),d0
  713.  tst.b ObjInTop(a0)
  714.  bne.s .okbit
  715.  swap d0
  716. .okbit:
  717.  move.w d0,2(a0)
  718.  
  719.  move.l ToZoneFloor(a2),d0
  720.  move.l ToZoneRoof(a2),d1
  721.  tst.b ObjInTop(a0)
  722.  beq.s .notintop
  723.  move.l ToUpperFloor(a2),d0
  724.  move.l ToUpperRoof(a2),d1
  725. .notintop:
  726.  
  727.  move.w objyvel(a0),d2
  728.  add.w d2,4(a0)
  729.  
  730.  move.w 4(a0),d2
  731.  ext.l d2
  732.  asl.l #7,d2
  733.  move.l d2,d3
  734.  add.l #48*256,d2
  735.  sub.l #48*256,d3
  736.  
  737.  cmp.l d0,d2
  738.  blt.s .botnohit
  739.  move.l d0,d2
  740.  move.l d2,d3
  741.  neg.w objyvel(a0)
  742.  sub.l #96*256,d3
  743. .botnohit:
  744.  
  745.  cmp.l d1,d3
  746.  bgt.s .topnohit
  747.  move.l d1,d3
  748.  neg.w objyvel(a0)
  749. .topnohit:
  750.  
  751.  add.l #48*256,d3
  752.  asr.l #7,d3
  753.  move.w d3,4(a0)
  754.  
  755.  move.b damagetaken(a0),d2
  756.  beq .noscream
  757.  
  758.  sub.b d2,numlives(a0)
  759.  bgt .notdeadyet
  760.  
  761.  
  762.  movem.l d0-d7/a0-a6,-(a7)
  763.  sub.l ObjectPoints,a1
  764.  add.l #ObjRotated,a1
  765.  move.l (a1),Noisex
  766.  move.w #400,Noisevol
  767.  move.w #14,Samplenum
  768.  move.b #1,chanpick
  769.  clr.b notifplaying
  770.  st backbeat
  771.  move.b 1(a0),IDNUM
  772.  jsr MakeSomeNoise
  773.  movem.l (a7)+,d0-d7/a0-a6
  774.  
  775.  movem.l d0-d7/a0-a6,-(a7)
  776.  move.w #0,d0
  777.  move.w #9,d2
  778.  move.w #31,d3
  779.  jsr ExplodeIntoBits
  780.  movem.l (a7)+,d0-d7/a0-a6
  781.  move.w #-1,12(a0)
  782.  move.w 12(a0),GraphicRoom(a0)
  783.  rts
  784.  
  785. .noexplode:
  786.  
  787.  movem.l d0-d7/a0-a6,-(a7)
  788.  sub.l ObjectPoints,a1
  789.  add.l #ObjRotated,a1
  790.  move.l (a1),Noisex
  791.  move.w #200,Noisevol
  792.  move.w screamsound,Samplenum
  793.  move.b #1,chanpick
  794.  clr.b notifplaying
  795.  st backbeat
  796.  move.b 1(a0),IDNUM
  797.  jsr MakeSomeNoise
  798.  movem.l (a7)+,d0-d7/a0-a6
  799.  move.w #18,10(a0)
  800.  move.w 12(a0),GraphicRoom(a0)
  801.  rts
  802.  
  803. .notdeadyet:
  804.  clr.b damagetaken(a0)
  805.  movem.l d0-d7/a0-a6,-(a7)
  806.  sub.l ObjectPoints,a1
  807.  add.l #ObjRotated,a1
  808.  move.l (a1),Noisex
  809.  move.w #200,Noisevol
  810.  move.w screamsound,Samplenum
  811.  move.b #1,chanpick
  812.  clr.b notifplaying
  813.  move.b 1(a0),IDNUM
  814.  st backbeat
  815.  jsr MakeSomeNoise
  816.  movem.l (a7)+,d0-d7/a0-a6
  817.  
  818. .noscream
  819.  
  820. ; tst.b canshootgun
  821. ; beq .cantshoot
  822.  cmp.w #20,FourthTimer(a0)
  823.  bge .cantshoot
  824.  
  825.  move.w #50,ThirdTimer(a0)
  826.  
  827.  move.w #18,10(a0)
  828.  
  829.  
  830.  move.w #20,Samplenum
  831.  move.b #0,SHOTTYPE
  832.  move.b #5,SHOTPOWER
  833.  move.w #16,SHOTSPEED
  834.  move.w #3,SHOTSHIFT
  835.  move.b ObjInTop(a0),SHOTINTOP
  836.  move.w #0,SHOTOFFMULT
  837.  move.w #-10,2(a0)
  838.  move.l #0,SHOTYOFF
  839.  jsr FireAtPlayer1
  840.  
  841. .cantshoot:
  842.  
  843.  
  844.  move.w TempFrames,d0
  845.  sub.w d0,SecTimer(a0)
  846.  bge.s .nohiss
  847.  
  848.  movem.l d0-d7/a0-a6,-(a7)
  849.  sub.l ObjectPoints,a1
  850.  add.l #ObjRotated,a1
  851.  move.l (a1),Noisex
  852.  move.w #100,Noisevol
  853.  move.w #16,Samplenum
  854.  move.b #1,chanpick
  855.  clr.b notifplaying
  856.  move.b 1(a0),IDNUM
  857.  st backbeat
  858.  jsr MakeSomeNoise
  859.  movem.l (a7)+,d0-d7/a0-a6
  860.  
  861.  Jsr GetRand
  862.  lsr.w #6,d0
  863.  and.w #255,d0
  864.  add.w #300,d0
  865.  move.w d0,SecTimer(a0)
  866.  
  867. .nohiss:
  868.  
  869.  move.b ObjInTop(a0),ViewerTop
  870.  move.b PLR1_StoodInTop,TargetTop
  871.  move.l PLR1_Roompt,ToRoom
  872.  move.l objroom,FromRoom
  873.  move.w newx,Viewerx
  874.  move.w newz,Viewerz
  875.  move.w PLR1_xoff,Targetx
  876.  move.w PLR1_zoff,Targetz
  877.  move.l PLR1_yoff,d0
  878.  asr.l #7,d0
  879.  move.w d0,Targety
  880.  move.w 4(a0),Viewery
  881.  jsr CanItBeSeen
  882.  
  883.  clr.b 17(a0)
  884.  tst.b CanSee
  885.  beq .carryonprowling
  886.  
  887.  move.b #1,17(a0)
  888.  
  889. .carryonprowling:
  890.  
  891.  cmp.b #'n',mors
  892.  beq.s .carryonprowling2
  893.  
  894.  
  895.  move.b ObjInTop(a0),ViewerTop
  896.  move.b PLR2_StoodInTop,TargetTop
  897.  move.l PLR2_Roompt,ToRoom
  898.  move.l objroom,FromRoom
  899.  move.w newx,Viewerx
  900.  move.w newz,Viewerz
  901.  move.w PLR2_xoff,Targetx
  902.  move.w PLR2_zoff,Targetz
  903.  move.l PLR2_yoff,d0
  904.  asr.l #7,d0
  905.  move.w d0,Targety
  906.  move.w 4(a0),Viewery
  907.  jsr CanItBeSeen
  908.  
  909.  tst.b CanSee
  910.  beq .carryonprowling2
  911.  
  912.  or.b #2,17(a0)
  913.  
  914. .carryonprowling2:
  915.  
  916.  move.w 12(a0),GraphicRoom(a0)
  917.  rts
  918.